/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Dao;

import Model.Livro;
import conexao.Conecta;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author José Alexandre
 */
public class LivroDaoImp implements LivroDao {

    public void save(Livro livro) {
         Conecta c = new Conecta();

            if ("sucesso".equals(c.getMsg())) {

                // Vamos preparar o comando SQL:
                String sql = "insert into APP.LIVROS (autor, avaliacao, editora, isbn, paginas, titulo) "
                                          + "values ('"+livro.getAutor()+"',"+livro.getAvaliacao()+",'"+livro.getEditora()+"', '"+livro.getIsbn()+"',"+livro.getPaginas()+", '"+livro.getTitulo()+"')";
                try {

                    c.getStm().execute(sql);
                } catch (SQLException ex) {
                    //return ex.getMessage();
                    System.out.print("erro");
                } catch (Exception ex) {
                    System.out.print("erro");
                }

            } else {

            }
            //return c.fechaConexao();
    }
    public Livro getLivro(long id) {
        //List<Livro> lista = new ArrayList<Livro>();

        Livro liv = null;
        Conecta c = new Conecta();

            if ("sucesso".equals(c.getMsg())) {

                // Vamos preparar o comando SQL:
                String sql = " select l.ID id, l.AUTOR autor, l.AVALIACAO avaliacao, l.EDITORA editora, l.ISBN isbn, l.PAGINAS paginas, l.TITULO titulo "
                            + "  from APP.LIVROS l"
                            + " where l.ID = "+id;

                // Definido o Statement, executamos o comando no banco de dados.
                
                ResultSet rs;
                try {

                    rs = c.getStm().executeQuery(sql);

                    // caso existir resultados, percorremos a lista.
                    while (rs.next()) {
                        //leitura dos campos da tabela em vari�veis
                        long cod = rs.getLong("id");
                        String autor = rs.getString("autor");
                        int avaliacao = rs.getInt("avaliacao");
                        String editora = rs.getString("editora");
                        String isbn = rs.getString("isbn");
                        int paginas = rs.getInt("paginas");
                        String titulo = rs.getString("titulo");

                        //Montar os dados de Livro.
                        liv = new Livro(id, titulo, autor, paginas, editora, isbn, avaliacao);
                        //lista.add(liv);
                    }


                } catch (SQLException ex) {
                    //ex.getMessage();
                }

            } else {
                //c.getMsg());
            }
            c.fechaConexao();


        return liv;
    }
    public List<Livro> list() {
        List<Livro> lista = new ArrayList<Livro>();

        
        Conecta c = new Conecta();

            if ("sucesso".equals(c.getMsg())) {

                // Vamos preparar o comando SQL:
                String sql = " select l.ID id, l.AUTOR autor, l.AVALIACAO avaliacao, l.EDITORA editora, l.ISBN isbn, l.PAGINAS paginas, l.TITULO titulo "
                            + "  from APP.LIVROS l";

                // Definido o Statement, executamos o comando no banco de dados.

                ResultSet rs;
                try {

                    rs = c.getStm().executeQuery(sql);

                    // caso existir resultados, percorremos a lista.
                    while (rs.next()) {
                        //leitura dos campos da tabela em vari�veis
                        long id = rs.getLong("id");
                        String autor = rs.getString("autor");
                        int avaliacao = rs.getInt("avaliacao");
                        String editora = rs.getString("editora");
                        String isbn = rs.getString("isbn");
                        int paginas = rs.getInt("paginas");
                        String titulo = rs.getString("titulo");

                        //Montar os dados de Livro.long id, String titulo, String autor, int paginas, String editora, String isbn, int avaliacao
                        Livro liv = new Livro(id, titulo, autor, paginas, editora, isbn, avaliacao);
                        lista.add(liv);
                    }


                } catch (SQLException ex) {
                    //ex.getMessage();
                }

            } else {
                //c.getMsg());
            }
            c.fechaConexao();


        return lista;
    }
    public void remove(Livro livro) {
        Conecta c = new Conecta();

            if ("sucesso".equals(c.getMsg())) {

                // Vamos preparar o comando SQL:
                String sql = "delete from APP.LIVROS l where l.id="+livro.getId();
                try {
                    c.getStm().execute(sql);
                } catch (SQLException ex) {
                    //return ex.getMessage();
                }

            } else {

            }
            //return c.fechaConexao();
    }
    public void update(Livro livro) {
        Conecta c = new Conecta();

            if ("sucesso".equals(c.getMsg())) {

                // Vamos preparar o comando SQL:
                String sql = "update APP.LIVROS set AUTOR = '"+livro.getAutor()+"' , AVALIACAO="+livro.getAvaliacao()+","
                        + " EDITORA='"+livro.getEditora()+"', ISBN='"+livro.getIsbn()+"', PAGINAS="+livro.getPaginas()+", TITULO='"+livro.getTitulo()+"' where ID = "+livro.getId();
                try {
                    c.getStm().execute(sql);
                } catch (SQLException ex) {
                    //return ex.getMessage();
                }

            } else {

            }
            //return c.fechaConexao();
    }
}
